#ifndef __INTERRUPT_H_
#define __INTERRUPT_H_


typedef int (*irq_handler_t) (int irq);

#define HW_IRQ_BASE     32
#define NR_IRQS         256         /*   中断总数   */
#define RSP_IRQ_OK      0           /*   响应irq 完成    */

enum {                              /*   硬件中断   */
    CLOCK_IRQ = 0,
    KEYBOARD_IRQ,
    CASCADE_IRQ,
    ETHER_IRQ,
    SECONDARY_IRQ,
    RS232_IRQ,
    XT_WINI_IRQ,
    FLOPY_IRQ,
    PRINTER_IRQ,
    REAL_CLOCK_IRQ,
    DRECT_IRQ2_IRQ,
    RESERVED_10_IRQ,
    RESERVED_11_IRQ,
    MOUSE_IRQ,
    FPU_IRQ,
    AT_WINI_IRQ,
    RESERVED_15_IRQ,
    NR_HW_IRQS,
};

/*   中断初始化   */
void irq_init(void);
int register_irq(int irq, irq_handler_t handler);                   /*   注册某一个中断的处理函数   */

/*   arch 里硬件提供的函数   */
extern void disable_irqs(void);
extern void enable_irqs(void);

extern void interrupt_lock(void);
extern void interrupt_unlock(void);

#endif